Storage devices are employed to store data that are accessed by computer systems. Examples of storage devices include volatile and non-volatile memory, floppy drives, hard disk drives, tape drives, optical drives, or other types of storage units. A storage device may be locally attached to an input/output (I/O) channel of a computer. For example, a hard disk drive may be connected to a computer's disk controller.
A storage device may also be accessible over a network. Examples of such a storage device include network attached storage (NAS) and storage area network (SAN) devices. A storage device may be a single stand-alone component or may include a system of storage devices such as in the case of Redundant Array Of Inexpensive Disks (RAID) groups and some Direct Access Storage Devices (DASD). Generally, disk storage is typically implemented as one or more storage “volumes” (i.e., data volumes) that are formed by physical storage disks and define an overall logical arrangement of the storage space. Each volume is typically associated with its own file system. The storage disks within a volume may be typically organized as one or more groups of RAID.
For mission-critical applications requiring high availability of stored data, various techniques for enhancing data reliability are typically employed. One such technique is to provide a “mirror” for each storage device. In a mirror arrangement, data are written to at least two storage devices. Thus, identical data may be read from either of the two storage devices so long as the two devices are operational and contain the same data. In other words, either of the two storage devices may process the read requests so long as the two storage devices are in synchronization. Synchronous mirroring applications are typically used to achieve data synchronization between the two storage devices.
Common synchronous mirroring applications require client transactions to be committed locally (at a primary or first site) and to be committed remotely (at a backup or secondary site) before a transaction is deemed to be committed and acknowledged to a client device. In other words, client transactions are usually performed on the primary site and the backup site. However, high latency is inherent in these applications that use synchronous mirroring applications. Relaying the client transaction from the primary site to the backup site, and sending an acknowledgement of the transaction completion from the backup site to the primary site and then to the client device will incur a latency value equal to the round trip transmission time (RTT) concerning the transaction. This latency value is directly proportional to the distance between the primary site and backup site, with the two sites being related by the speed of light (which is an invariant). In implementations where the primary site and the backup site are separated by a far distance, this latency value adds a significant delay to the client response time, and this delay can greatly degrade the application performance.
Therefore, the current technology is limited in its capabilities and suffers from at least the above constraints and deficiencies.